【MySQL】ORDER BY - 取得データのソート(並び替え)
MySQLのORDER BYについて解説します。
検証環境
ORDER BY
ORDER BY句は“SELECT文の取得レコード(データ)を任意カラムで並び替える句”です。
基本構文
ORDER BY カラム [ ASC | DESC ]
カラムの部分に並び替えの基準とするカラム、[ ASC | DESC ]の部分に昇順はASC、降順はDESCを記述します。
並び替えるカラムが複数個ある場合は、カラム [ ASC | DESC ]の形式でカンマ(,)区切りにします。
※ 省略した場合はASC(昇順)が適用されます。
サンプル
mysql> SELECT * FROM items;
+----+-----------+-------+-------+
| id | name | price | stock |
+----+-----------+-------+-------+
| 1 | Apple | 200 | 10 |
| 2 | Orange | 150 | 3 |
| 3 | Pineapple | 1100 | 3 |
| 4 | Grapes | 3500 | 1 |
| 5 | Melon | 3500 | 5 |
+----+-----------+-------+-------+
5 rows in set (0.00 sec)
mysql> SELECT * FROM items
___ih_hl_start
-> ORDER BY price DESC;
___ih_hl_end
+----+-----------+-------+-------+
| id | name | price | stock |
+----+-----------+-------+-------+
| 4 | Grapes | 3500 | 1 |
| 5 | Melon | 3500 | 5 |
| 3 | Pineapple | 1100 | 3 |
| 1 | Apple | 200 | 10 |
| 2 | Orange | 150 | 3 |
+----+-----------+-------+-------+
5 rows in set (0.00 sec)
14行目のORDER BY price DESCがORDER BY句です。
priceカラムの降順(DESC)でレコードを並び替えています。
また、ORDER BY句のカラムが複数個ある場合は次のようになります。
mysql> SELECT * FROM items
___ih_hl_start
-> ORDER BY price DESC, stock DESC;
___ih_hl_end
+----+-----------+-------+-------+
| id | name | price | stock |
+----+-----------+-------+-------+
| 5 | Melon | 3500 | 5 |
| 4 | Grapes | 3500 | 1 |
| 3 | Pineapple | 1100 | 3 |
| 1 | Apple | 200 | 10 |
| 2 | Orange | 150 | 3 |
+----+-----------+-------+-------+
5 rows in set (0.00 sec)
2行目がORDER BY句ですが、並び替えのカラムにprice DESCとstock DESCの2つがあります。
並び替えのカラムが複数個ある場合は、先頭から順番に並び替えの優先度が高くなります。
上記サンプルの優先度はpriceの降順(DESC)、次にpriceカラムの値が同じレコード同士はstockカラムの降順(DESC)です。